import axios from 'axios'
import { API_BASE_URL } from '@/config/env'

// 防重复弹窗
let loginExpiredModalShown = false

// 公开API白名单（不需要登录的接口）
const PUBLIC_API_PATHS = [
  '/app/good/list/page/vo', // 精选案例列表
]

// 检查是否是公开API
function isPublicApi(url: string): boolean {
  return PUBLIC_API_PATHS.some(path => url.includes(path))
}

// 创建 Axios 实例
const myAxios = axios.create({
  baseURL: API_BASE_URL,
  withCredentials: true,
})

// 全局请求拦截器
myAxios.interceptors.request.use(
  function (config) {
    // 处理请求
    return config
  },
  function (error) {
    // 处理请求错误
    return Promise.reject(error)
  },
)

// 全局响应拦截器
myAxios.interceptors.response.use(
	function (response) {
		const { data } = response
		// 未登录
		if (data.code === 40100) {
			// 检查是否是公开API，公开API不需要弹登录弹窗
			const isPublic = isPublicApi(response.request.responseURL || response.config?.url || '')

			// 不是获取用户信息的请求，不是公开API，并且用户目前不是已经在用户登录页面，则显示登录过期弹窗
			if (
				!response.request.responseURL.includes('user/get/login') &&
				!isPublic &&
				!window.location.pathname.includes('/user/login')
			) {
				// 防止重复弹窗
				if (!loginExpiredModalShown) {
					loginExpiredModalShown = true

					// 动态导入状态管理
					Promise.all([
						import('@/stores/useAuthStore'),
						import('@/stores/useLoginUserStore'),
						import('@/stores/useGenerationStore')
					]).then(([{ useAuthStore }, { useLoginUserStore }, { useGenerationStore }]) => {
						// 检查是否有活跃的生成任务
						const generationStore = useGenerationStore()
						const hasActiveGeneration = generationStore.hasActiveGeneration()

						if (hasActiveGeneration) {
							console.warn('⚠️ 检测到活跃的生成任务，认证过期但不清理生成状态')
							// 只显示登录过期弹窗，不清理用户状态，让生成继续
							const authStore = useAuthStore()
							const currentUrl = window.location.pathname + window.location.search + window.location.hash
							authStore.showLoginExpiredModal(currentUrl)
						} else {
							// 没有活跃生成任务，正常处理登录过期
							const loginUserStore = useLoginUserStore()
							loginUserStore.clearLoginUser()

							const authStore = useAuthStore()
							const currentUrl = window.location.pathname + window.location.search + window.location.hash
							authStore.showLoginExpiredModal(currentUrl)
						}

						// 3秒后重置防重复标志，缩短时间让体验更好
						setTimeout(() => {
							loginExpiredModalShown = false
						}, 3000)
					}).catch(console.error)
				}
			}
		}
		return response
	},
	function (error) {
		// 处理网络错误或其他错误
		console.error('请求错误:', error)
		return Promise.reject(error)
	}
)

export default myAxios
